// MarkdownProcessor.java
package com.ren.service;

import com.ren.model.ListItem;
import java.util.List;
import java.util.ArrayList;

/**
 * Markdown处理器
 * 负责Markdown内容的解析、转换和处理
 */
public class MarkdownProcessor {

    /**
     * 将Markdown文本转换为ListItem列表
     * @param markdownContent Markdown格式的内容
     * @return ListItem列表
     */
    public List<ListItem> parseMarkdownToListItems(String markdownContent) {
        List<ListItem> items = new ArrayList<>();
        if (markdownContent == null || markdownContent.isEmpty()) {
            return items;
        }

        String[] lines = markdownContent.split("\n");

        for (String line : lines) {
            if (line.matches("\\d+\\.\\s.*")) {
                String content = line.substring(line.indexOf(". ") + 2);
                // 检查是否有删除线标记（表示已完成）
                boolean completed = content.startsWith("~~") && content.endsWith("~~");
                if (completed) {
                    content = content.substring(2, content.length() - 2);
                }
                items.add(new ListItem(content, completed));
            }
        }

        return items;
    }

    /**
     * 将ListItem列表转换为Markdown文本
     * @param items ListItem列表
     * @return Markdown格式的内容
     */
    public String convertListItemsToMarkdown(List<ListItem> items) {
        if (items == null || items.isEmpty()) {
            return "";
        }

        StringBuilder markdown = new StringBuilder();
        for (int i = 0; i < items.size(); i++) {
            ListItem item = items.get(i);
            markdown.append(i + 1).append(". ");
            if (item.isCompleted()) {
                markdown.append("~~").append(item.getText()).append("~~");
            } else {
                markdown.append(item.getText());
            }
            if (i < items.size() - 1) {
                markdown.append("\n");
            }
        }

        return markdown.toString();
    }

    /**
     * 将Markdown转换为HTML
     * @param markdown Markdown内容
     * @return HTML内容
     */
    public String convertMarkdownToHtml(String markdown) {
        if (markdown == null || markdown.isEmpty()) {
            return "<html><body></body></html>";
        }

        // 处理有序列表
        StringBuilder html = new StringBuilder();
        html.append("<html><body>");

        String[] lines = markdown.split("\n");
        boolean inList = false;

        for (String line : lines) {
            if (line.matches("\\d+\\.\\s.*")) {
                if (!inList) {
                    html.append("<ol>");
                    inList = true;
                }
                String content = line.substring(line.indexOf(". ") + 2);

                // 处理删除线和灰色样式
                if (content.startsWith("~~") && content.endsWith("~~") && content.length() > 4) {
                    // 已完成项目：添加删除线和灰色样式
                    String text = content.substring(2, content.length() - 2);
                    html.append("<li><span style=\"color: #999;\"><del>").append(text).append("</del></span></li>");
                } else {
                    // 普通项目：处理可能存在的删除线
                    content = content.replaceAll("~~(.*?)~~", "<del>$1</del>");
                    html.append("<li>").append(content).append("</li>");
                }
            } else {
                if (inList) {
                    html.append("</ol>");
                    inList = false;
                }
                if (!line.trim().isEmpty()) {
                    html.append("<p>").append(line).append("</p>");
                }
            }
        }

        if (inList) {
            html.append("</ol>");
        }

        html.append("</body></html>");
        return html.toString();
    }
}
